package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import utilidades.Constants;
import utilidades.ConstantsBusiness;
import vo.EquipoVO;
import vo.TacticaVO;
import vo.UsuarioVO;
import exception.DaoException;

public class TacticaDAO extends DAOObjectImpl{
			
	public TacticaDAO(Connection aConexion) {
		this.conexion=aConexion;
	}

	/**
	 * Obtiene las tacticas a las que tiene acceso un usuario
	 * @param aNick Datos del usuario del que buscar las tacticas
	 * @return Lista de tacticas disponibles
	 * @throws DaoException Posible excepcion a controlar
	 */
	public List<TacticaVO> getTacticas(String aNick) throws DaoException{
		
		String tmpQuery = Constants.CADENA_VACIA;
		ResultSet tmpDatos = null;
		List<TacticaVO> tmpTacticas = new ArrayList<TacticaVO>();
		PreparedStatement tmpSentencia = null;
		try{
			tmpQuery = ConstantsBusiness.GET_TACTICAS;
			tmpSentencia=conexion.prepareStatement(tmpQuery);
			tmpSentencia.setString(1, aNick);
			tmpDatos = tmpSentencia.executeQuery();
			while (tmpDatos.next()){
				tmpTacticas.add(
						new TacticaVO(Integer.valueOf(tmpDatos.getInt("defensas")), 
									  Integer.valueOf(tmpDatos.getInt("medios")), 
									  Integer.valueOf(tmpDatos.getInt("delanteros")), 
									  tmpDatos.getString("descripcion"), 
									  Integer.valueOf(tmpDatos.getInt("idTactica"))));
			}
			if (tmpTacticas.isEmpty()){
				tmpTacticas = null;
			}
			return tmpTacticas;
		} catch (SQLException aSqlException){
			throw new DaoException(aSqlException.getMessage());
		} finally {
			try{
				if (tmpDatos!=null){
					tmpDatos.close();
				}
				if (tmpSentencia!=null){
					tmpSentencia.close();
				}
			}catch(SQLException aSqlException){
				throw new DaoException(aSqlException.getMessage());
			}			
		}
	}

	/**
	 * Obtiene los datos de la tactica con el identificador pasado como parametro
	 * @param aCriteria Datos de la tactica a buscar
	 * @return TacticaVO con los datos de la tactica
	 * @throws DaoException Posible excepcion a controlar
	 */
	public Object load(Object aCriteria) throws DaoException {
		String tmpQuery = Constants.CADENA_VACIA;
		ResultSet tmpDatos = null;
		TacticaVO tmpResultado = null;
		PreparedStatement tmpSentencia = null;
		if (((TacticaVO)aCriteria).getIdTactica()==null){
			return null;
		}
		try{
			tmpQuery = ConstantsBusiness.TACTICA_LOAD;
			tmpSentencia=conexion.prepareStatement(tmpQuery);
			tmpSentencia.setLong(1, ((TacticaVO)aCriteria).getIdTactica());
			tmpDatos = tmpSentencia.executeQuery();
			if (tmpDatos.next()){
				tmpResultado = new TacticaVO(Integer.valueOf(tmpDatos.getInt("defensas")), 
						  Integer.valueOf(tmpDatos.getInt("medios")), 
						  Integer.valueOf(tmpDatos.getInt("delanteros")), 
						  tmpDatos.getString("descripcion"), 
						  Integer.valueOf(tmpDatos.getInt("idTactica")));
			}
			return tmpResultado;
		} catch (SQLException aSqlException){
			throw new DaoException(aSqlException.getMessage());
		} finally {	
			try{
				if (tmpDatos!=null){
					tmpDatos.close();
				}
				if (tmpSentencia!=null){
					tmpSentencia.close();
				}
			}catch(SQLException aSqlException){
				throw new DaoException(aSqlException.getMessage());
			}			
		}
	}

}
